<!DOCTYPE HTML>
<html>
  <head>
    <meta charset='utf-8'/>
    <script src='/tests/SimpleTest/SimpleTest.js'></script>
    <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
    <script src='ensure-ext.js'></script>
  </head>
  <body>
    <script>

'use strict';

var ENSURE = 'ENSURE'; // Works on all test machines.
var FORBID = 'FORBID'; // Should not work on any test machine.
var MACHINE_SPECIFIC = 'MACHINE_SPECIFIC';

var defaultExts = [
    // Ratified
    ['ANGLE_instanced_arrays'        , [MACHINE_SPECIFIC, FORBID          ]],
    ['EXT_blend_minmax'              , [MACHINE_SPECIFIC, FORBID          ]],
    ['EXT_disjoint_timer_query'      , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
    ['EXT_frag_depth'                , [MACHINE_SPECIFIC, FORBID          ]],
    ['EXT_shader_texture_lod'        , [MACHINE_SPECIFIC, FORBID          ]],
    ['EXT_texture_filter_anisotropic', [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
    ['OES_element_index_uint'        , [ENSURE          , FORBID          ]],
    ['OES_standard_derivatives'      , [MACHINE_SPECIFIC, FORBID          ]],
    ['OES_texture_float'             , [ENSURE          , FORBID          ]],
    ['OES_texture_float_linear'      , [ENSURE          , ENSURE          ]],
    ['OES_texture_half_float'        , [ENSURE          , FORBID          ]],
    ['OES_texture_half_float_linear' , [ENSURE          , FORBID          ]],
    ['OES_vertex_array_object'       , [ENSURE          , FORBID          ]],
    ['WEBGL_compressed_texture_s3tc' , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
//  ['WEBGL_debug_renderer_info'     , [FORBID          , FORBID          ]], // Complicated!
    ['WEBGL_debug_shaders'           , [FORBID          , FORBID          ]],
    ['WEBGL_depth_texture'           , [MACHINE_SPECIFIC, FORBID          ]],
    ['WEBGL_draw_buffers'            , [MACHINE_SPECIFIC, FORBID          ]],
    ['WEBGL_lose_context'            , [ENSURE          , ENSURE          ]],

    // Community Approved
    ['EXT_color_buffer_float'        , [FORBID          , ENSURE          ]],
    ['EXT_color_buffer_half_float'   , [MACHINE_SPECIFIC, FORBID          ]],
    ['EXT_sRGB'                      , [MACHINE_SPECIFIC, FORBID          ]],
    ['WEBGL_color_buffer_float'      , [MACHINE_SPECIFIC, FORBID          ]],
    ['WEBGL_compressed_texture_atc'  , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
    ['WEBGL_compressed_texture_etc1' , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
    ['WEBGL_compressed_texture_pvrtc', [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
];

var draftExts = [
    ['WEBGL_compressed_texture_es3', [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
];

var nonImplementedExts = [
    'OES_fbo_render_mipmap',
    'WEBGL_compressed_texture_astc',
    'WEBGL_security_sensitive_resources',
    'WEBGL_shared_resources',
];

////////////////////

function TestExtFor(contextType, extName, status) {
    switch (status) {
    case ENSURE:
        EnsureExtFor(contextType, extName);
        break;

    case FORBID:
        EnsureExtFor(contextType, extName, false);
        break;

    case MACHINE_SPECIFIC:
        break;
    }
}

function TestExt(extName, statusArr) {
    TestExtFor('webgl', extName, statusArr[0]);
    TestExtFor('webgl2', extName, statusArr[1]);
}

////////////////////

defaultExts.forEach(function(x) {
    var extName = x[0];
    var statusArr = x[1];
    TestExt(extName, statusArr);
});

nonImplementedExts.forEach(function(extName) {
    EnsureExt(extName, false);
});

draftExts.forEach(function(x) {
    var extName = x[0];
    EnsureExt(extName, false);
});

Lastly_WithDraftExtsEnabled(function() {
    draftExts.forEach(function(x) {
        var extName = x[0];
        var statusArr = x[1];
        TestExt(extName, statusArr);
    });
});

    </script>
  </body>
</html>
